import type { Ref } from 'vue';

import type { VxeToolbarPropTypes } from '@vben/plugins/vxe-table';

import { ref } from 'vue';

import { cloneDeep } from '@vben/utils';

/**
 * 获取工具栏按钮
 * @description 注意：code 为按钮的唯一标识，不可重复
 * @description 注意：status 为按钮的状态，可选值为 primary、success、info、warning、danger
 * @description 按钮顺序为新增、修改、删除
 */
export function getToolBarBtns() {
  return ref<VxeToolbarPropTypes.Buttons>([
    {
      name: '新增',
      code: 'myAdd',
      status: 'primary',
      icon: 'vxe-icon-add',
      disabled: false,
      visible: true,
    },
    {
      name: '修改',
      code: 'myEdit',
      status: 'success',
      icon: 'vxe-icon-signature',
      disabled: true,
      visible: true,
    },
    {
      name: '删除',
      code: 'myDel',
      status: 'error',
      icon: 'vxe-icon-delete',
      disabled: true,
      visible: true,
    },
  ]);
}

/**
 * 设置单个表格工具栏按钮禁用状态
 * @param array 按钮数组
 * @param indexCode 按钮索引
 * @param disabled 是否禁用
 */
export function setToolBarBtnDisabled(
  array: Ref<VxeToolbarPropTypes.Buttons>,
  indexCode: number,
  disabled: boolean,
) {
  const item = array.value[indexCode];
  if (item) {
    item.disabled = disabled;
  }
}

/**
 * 设置默认表格工具栏按钮禁用状态
 * @param buttons 按钮数组
 * @param count 选中数量,直接传复选框选中的数量
 */
export function setToolBarBtnDefaultDisabled(
  buttons: Ref<VxeToolbarPropTypes.Buttons>,
  count: number,
) {
  if (count === 1) {
    setToolBarBtnDisabled(buttons, 1, false);
    setToolBarBtnDisabled(buttons, 2, false);
  } else if (count > 0) {
    setToolBarBtnDisabled(buttons, 2, false);
    setToolBarBtnDisabled(buttons, 1, true);
  } else {
    setToolBarBtnDisabled(buttons, 1, true);
    setToolBarBtnDisabled(buttons, 2, true);
  }
}

const baseButtons = ref<VxeToolbarPropTypes.Buttons>([
  { name: '新增', code: 'add', status: 'primary', icon: 'vxe-icon-add' },
  {
    name: '修改',
    code: 'edit',
    status: 'success',
    icon: 'vxe-icon-edit',
    disabled: true,
  },
  {
    name: '删除',
    code: 'myDelete',
    status: 'error',
    icon: 'vxe-icon-delete',
    disabled: true,
  },
]);

/**
 * 获取基础按钮并合并自定义按钮
 * @param customButtons 自定义按钮
 * @returns 合并后的按钮列表
 */
export function mergeToolbarButtons(
  customButtons: VxeToolbarPropTypes.Buttons = [],
): Ref<VxeToolbarPropTypes.Buttons> {
  return ref<VxeToolbarPropTypes.Buttons>(
    cloneDeep([...baseButtons.value, ...customButtons]),
  );
}

/**
 * 更新左侧按钮的状态
 * 此函数用于合并基础按钮与自定义按钮，并根据选中行数来设置编辑、删除按钮的禁用状态
 * @param selectedRows 选中的行数据数组
 * @param buttons buttons
 */
export function updateToolbarButtonStatus(
  selectedRows: Ref<any[]>,
  buttons: VxeToolbarPropTypes.Buttons = [],
) {
  buttons.map((button) => {
    if (button.code === 'edit' || button.code === 'myDelete') {
      button.disabled = selectedRows.value.length === 0;
    }
    return button;
  });
}
